package com.palominocia.capa_datos_nodoCentral.dbPostgreSQL.schema1.modelo.seguridad;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.EntityManager;
import javax.persistence.Enumerated;
import javax.persistence.ManyToOne;
import javax.persistence.PersistenceContext;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord;
import org.springframework.roo.addon.tostring.RooToString;

import com.palominocia.capa_datos_nodoCentral.dbPostgreSQL.schema1.modelo.opciones.Habilitacion;

@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class Sesiones {
	@PersistenceContext(unitName = "persistenceUnit")
	transient EntityManager entityManager;
	/**
     */
	@NotNull
	private String ipAdressSesion;

	/**
     */
	@NotNull
	@Temporal(TemporalType.TIMESTAMP)
	@DateTimeFormat(style = "M-")
	private Date fechaIniSesion;

	/**
     */
	@ManyToOne
	private Usuario usernameSesion;

	/**
     */
	@ManyToOne
	private TipoAcceso tipoAccesoSesion;

	/**
     */
	@NotNull
	@Column(name = "TOKEN_REFERENCIA", unique = true)
	private String tokenReferencia;

	/**
     */
	@Enumerated
	private Habilitacion SesionValida;

	@Transient
	public static Sesiones findSesionesbyToken(String tokenReferencia2) {
		Sesiones sesion;
		try {
			sesion = entityManager()
					.createQuery(
							"SELECT o FROM Sesiones o WHERE o.tokenReferencia=:tokenReferencia",
							Sesiones.class)
					.setParameter("tokenReferencia", tokenReferencia2)
					.getSingleResult();

		} catch (org.springframework.dao.EmptyResultDataAccessException e) {
			sesion = null;
		}
		return sesion;
	}

	@Transient
	public static List<Sesiones> findAllSesionesbyUserAccesoIp(Usuario user,
			TipoAcceso tipo, String ipAdress) {
		List<Sesiones> sesiones;
		try {
			sesiones = entityManager()
					.createQuery(
							"SELECT o FROM Sesiones o WHERE o.usernameSesion=:usuario AND o.tipoAccesoSesion=:tipoAcceso AND o.ipAdressSesion=:ipAdress",
							Sesiones.class).setParameter("usuario", user)
					.setParameter("tipoAcceso", tipo)
					.setParameter("ipAdress", ipAdress).getResultList();

		} catch (org.springframework.dao.EmptyResultDataAccessException e) {
			sesiones = null;
		}
		return sesiones;
	}
}
